D. Danks. 2003. "Equilibria of the Rescorla-Wagner model." Journal of Mathematical Psychology 47:109-121.
In [1]:
import pandas as pd
import pandas.rpy.common as com
import numpy as np
%load_ext autoreload
%autoreload 2
%load_ext rmagic
Load data into pandas
In [2]:
%%R
library(ndl)
In [3]:
data = com.load_data('danks')
data
Out[3]:
In [4]:
marginals = data.groupby('Cues',as_index=False).Frequency.sum()
marginals = marginals.rename(columns={'Frequency':'Total'})
marginals
Out[4]:
In [5]:
data = pd.merge(data,marginals,on='Cues')
data
Out[5]:
Create cue matrix
In [6]:
from sklearn.feature_extraction import DictVectorizer
In [7]:
def explode(cues):
return {}.fromkeys(cues.split('_'),True)
In [8]:
yes = data[data.Outcomes=='y']
Left-hand side of equation (15) on pg. 114
In [9]:
vec = DictVectorizer(dtype=int,sparse=False)
M = vec.fit_transform([explode(c) for c in yes.Cues])
M
Out[9]:
In [10]:
P = np.diag(yes.Total/sum(yes.Total))
P
Out[10]:
In [11]:
left = M.T.dot(P).dot(M)
left
Out[11]:
In [12]:
O = yes.Frequency / yes.Total
O
Out[12]:
In [13]:
right = M.T.dot(P).dot(O)
right
Out[13]:
In [14]:
np.linalg.solve(left,right)
Out[14]:
In [15]:
vec.get_feature_names()
Out[15]:
In [16]:
A = pd.DataFrame({'Cue':vec.get_feature_names(),'Weight':np.linalg.solve(left,right)})
A
Out[16]:
In [17]:
from ndl import *
In [18]:
data = com.load_data('danks')
danks(data)
Out[18]:
In [19]:
lexample = com.load_data('lexample')
lexample['Cues'] = orthoCoding(lexample['Word'],grams=1,sep='_')
lexample
Out[19]:
In [20]:
danks(lexample)
In [21]:
ndl(lexample)
Out[21]:
In [ ]: